package persistencia.cliente;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import negocio.cv.Exigencia;
import negocio.cv.TipoExigencia;
import persistencia.DACBase;
import persistencia.SingletonDACBase;


public class DACExigencia extends DACBase {
	
	private Exigencia exigencia;
	private TipoExigencia tipoExigencia;
	private List<TipoExigencia> tiposDeExigencia;
	private List<Exigencia> exigencias;
	private CallableStatement clstm;
	private ResultSet rs;
	
	public DACExigencia(DACBase dacBase){
		super(dacBase);
	}
	
	public List<TipoExigencia> consultarTiposExigencias(){
		tiposDeExigencia = new ArrayList<TipoExigencia>();
		try{
			clstm = getConn().prepareCall("{call tipoexigenciaConsultarTodos()}"); 
			clstm.execute();
			rs = clstm.getResultSet();			
			while (rs.next()) {
				
				tipoExigencia = new TipoExigencia();
				tipoExigencia.setIdTipoExigencia(rs.getInt("idtipoexigencia"));
				tipoExigencia.setNombre(rs.getString("nombre"));
				tipoExigencia.setDescripcion("descripcion");
				//le paso las exigencias que pertenecen a este tipo
				tipoExigencia.setExigencias(consultarExigenciasDelTipo(rs.getInt("idtipoexigencia")));
								 
				tiposDeExigencia.add(tipoExigencia);
            }			           

			rs.close();
			rs = null;
			clstm.close();
            clstm = null;
            
            getConn().close();
            
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarTiposExigencia()_DacExigencia");
			}
		
	    return tiposDeExigencia;		
	}
	
	
	public List<Exigencia> consultarExigenciasDelTipo(int idTipoExigencia){
		exigencias = new ArrayList<Exigencia>();
		exigencia = null;
		try{
			clstm = getConn().prepareCall("{call exigenciaConsultarPorTipo(?)}"); 
			clstm.setInt("idtipo", idTipoExigencia);
			clstm.execute();
			rs = clstm.getResultSet();			
			while (rs.next()) {
				exigencia = new Exigencia();
				exigencia.setIdExigencia(rs.getInt("idexigencia"));
				exigencia.setNombre(rs.getString("nombre"));
				exigencia.setDescripcion("descripcion");
				
				exigencias.add(exigencia);
			}
			
			
			
			/*
			 * Aca no cerramos la conexion porque este metodo 
			 * se usa para uso interno y la necesita abierta
			 *  
			rs.close();
			rs = null;
			clstm.close();
            clstm = null;
            
            getConn().close();*/
            
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarExigenciasDelTipo()_DACExigencia");
			}
		
	    return exigencias;	
	}
	
	public Exigencia consultarExigencia(int id){
		try{
			clstm = getConn().prepareCall("{call exigenciaConsultar(?)}"); 
			clstm.setInt("id", id);
			clstm.execute();
			rs = clstm.getResultSet();			
			if (rs.next()) {
				
				exigencia = new Exigencia(); 
				exigencia.setIdExigencia(rs.getInt("idexigencia"));
				exigencia.setNombre(rs.getString("nombre"));
				
				DACTipoExigencia dacTipo = new DACTipoExigencia(SingletonDACBase.tomarDACBase());
				exigencia.setTipoExigencia(dacTipo.consultarTipoDeExigencia(rs.getInt("idtipoexigencia")));
				
            }			           

			rs.close();
			rs = null;
			clstm.close();
            clstm = null;    
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarExigencia()_DacExigencia");
			}
		
	    return exigencia;
	}

}
